package com.sld.integrate.service;

import com.sld.integrate.domain.RecDevMessage;
import com.sld.integrate.domain.RecDevWorkSequence;
import com.sld.integrate.domain.RecDevWorkStandard;
import com.sld.integrate.vo.CalculateTuple;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author wugangwei
 * @since 2022-03-22
 */
public interface IRecDevCalculateService{

    /**
     * 4元组均值计算
     * @param list
     * @param filterValue true去掉最高、最低值求平均，false，不去
     * @return
     */
    CalculateTuple tupleAvgCalculate(List<RecDevMessage> list, Boolean filterValue);

    /**
     * 停止检测，常规检测。
     * A组：时间窗口收集固定组数，并发起计算，
     * B组：有补偿计算，是利用延迟线程实现的，因此不支持集群模式，仅支持单机运行。
     * 若有升级计划，需要重新设计。
     * @param sequence
     * @param recDevMessage
     * @return
     */
    int executeStaticCalculate(RecDevWorkSequence sequence, RecDevMessage recDevMessage);

    /**
     * C组：行车过程中的定时检测
     * 无需下发到监控屏，只需要存储下来即可。
     * @param sequence
     * @param recDevMessage
     */
    void executeTimerCalculate(RecDevWorkSequence sequence, RecDevMessage recDevMessage);


    /**
     * 补偿计算方法。[3,6]组。
     * 线程延迟任务，会启动清理和补偿计算的调用。
     * @param devId
     * @param messages
     */
    void compensateCompute(String devId, List<RecDevMessage> messages);


    /**
     * D组：回溯工地检测，5分钟时间差的连续回溯。
     * @param workId
     * @param timeOutSecond 单位：秒
     */
    void updateDestinationDetectValue(Integer workId, int timeOutSecond);


}
